2025-11-18
데이터 레이어
국가 경계, 호수, 그래티큘: 벡터(vector) 데이터
인구밀도, 수심: 래스터(raster) 데이터
데이터 원천
Natural Earth Data: 국가 경계, 호수, 그래티큘, 수심
NASA’s Socioeconomic Data and Applications Center (SEDAC): 인구 밀도
투영법: 로빈슨 도법(Robinson projection)
지도화 기법: 컬러, 범례, 주기 표기 등
벡터(vector) 데이터
포인트, 라인, 폴리곤
형상 데이터 + 속성 데이터
래스터(raster) 데이터
그리드 셀(grid cell)
일체형
벡터 데이터: 형상 데이터 + 속성 데이터
형상 데이터 (기하, 도형, 공간 데이터)
지리공간적 객체 자체에 대한 데이터
포인트(점), 라인(선), 폴리곤(면)으로 구분
버텍스(vertex)의 좌표값
속성 데이터
지리공간적 객체가 보유한 속성
기존 일반 데이터와 동일
| 구분 | 함수 |
|---|---|
| 읽고 쓰기 |
st_read(), st_write(), read_sf(), write_sf()
|
| 투영 관련 |
st_crs(), st_transform()
|
| 기하 측정 |
st_area(), st_length(), st_perimeter(), st_distance()
|
| 기하 변형 |
st_centroid(), st_buffer(), st_boundary(), st_simplify()
|
| 기하 생성 |
st_point(), st_voronoi() , st_convex_hull(), st_make_grid()
|
| 기하 검토 |
st_is_valid(), st_make_valid()
|
| 기하 중첩 |
st_filter(), st_intersection(), st_union(), st_crop()
|
| 기타 |
st_coordinates(), st_cast(), st_as_sf(), st_graticule(), st_join()
|
속성 데이터
csv 파일: readr 패키지의 read_csv() 함수
엑셀 파일: readxl 패키지의 read_excel() 함수
Open API를 통해 수집: tibble 객체
형상 데이터와 속성 데이터의 결합: dplyr 패키지의 left_join() 함수
왼편: 형상 데이터
오른편: 속성 데이터
데이터 형식
패키지: terra 패키지
불러오기: rast()
변환하기: project(), mosaic(), crop()
계산하기: global(), focal(), zonal()
수 많은 다른 함수들
https://datacarpentry.github.io/organization-geospatial/03-crs.html
PROJ 정형문자열
EPSG 숫자코드
| 투영법 | PROJ 파라미터 |
|---|---|
| 정적원통 도법 Equal Area Cylindrical | +proj=cea |
| 컴펙트 밀러 도법 Compact Miller | +proj=comill |
| 에케르트 IV 도법 Eckert IV | +proj=eck4 |
| 정거원통 도법 Equidistant Cylindrical | +proj=eqc |
| 구드 도법 Goode Homolosine | +proj=goode |
| 단열형 구드 도법 Interrupted Goode Homolosine | +proj=igh |
| 메르카토르 도법 Mercator | +proj=merc |
| 몰바이데 도법 Mollweide | +proj=moll |
| 로빈슨 도법 Robinson | +proj=robin |
| 시뉴소이드 도법 Sinusoidal | +proj=sinu |
| 빈켈트리펠 도법 Winkel Tripel | +proj=wintri |
| 적용 스케일 | EPSG 숫자코드 | 설명 |
|---|---|---|
| 전세계 | EPSG:4326 | WGS84, 측지좌표계, GPS에 사용 |
| EPSG:3857 | 웹 메르카토르 도법, 구글 맵스, 오픈스트리트맵에서 사용 | |
| EPSG:7789 | ITRF2014 | |
| 미국 | EPSG:2163 | 알베르스 정적원추 도법 |
| 유럽 | EPSG:3035 | 람베르트 정적방위 도법 |
| 우리나라 | EPSG:5179 | UTM-K |
| EPSG:5185 | 서부원점 | |
| EPSG:5186 | 중부원점 | |
| EPSG:5187 | 동부원점 | |
| EPSG:5188 | 동해원점 |
정적(static) 지도
동적(animated) 지도
인터랙티브(interactive) 지도
plotly 패키지의 ggplotly() 함수
ggiraph 패키지
leaflet 패키지: Leaflet JS 라이브러리의 래퍼 패키지
world_map <- ggplot() +
geom_sf(data = world_data, aes(fill = TFR, text = name_long)) +
coord_sf(crs = "+proj=robin") +
scale_fill_viridis_c() +
scale_x_continuous(breaks = seq(-180, 180, 30)) +
scale_y_continuous(breaks = c(-89.5, seq(-60, 60, 30), 89.5)) +
theme(
panel.background = element_rect("white"),
panel.grid = element_line(color = "gray80")
)
world_map
library(tmap)
tm_world_map <- tm_shape(world_data, crs = "+proj=robin") +
tm_graticules(
labels.show = FALSE,
x = seq(-180, 180, 30),
y = c(-89.5, seq(-60, 60, 30), 89.5)
) +
tm_polygons(
fill = "TFR",
fill.scale = tm_scale_continuous(values = "viridis")
) +
tm_layout(frame = FALSE)
tm_world_map
library(ggspatial)
sigungu_data <- sigungu_data |>
mutate(
index_class = case_when(
index < 0.2 ~ "1",
index >= 0.2 & index < 0.5 ~ "2",
index >= 0.5 & index < 1.0 ~ "3",
index >= 1.0 & index < 1.5 ~ "4",
index >= 1.5 ~ "5"
),
index_class = fct(index_class, levels = as.character(1:5))
)
class_color <- c("1" = "#d7191c", "2" = "#fdae61",
"3" = "#ffffbf", "4" = "#a6d96a",
"5" = "#1a9641")
ggplot_map <- ggplot() +
geom_sf(
data = sigungu_data,
aes(fill = index_class, text = SGG1_FNM),
show.legend = TRUE
) +
geom_sf(
data = sido_shp,
fill = NA,
lwd = 0.5
) +
scale_fill_manual(
name = "Classes",
labels = c("< 0.2", "0.2 ~ 0.5", "0.5 ~ 1.0",
"1.0 ~ 1.5", ">= 1.5"),
values = class_color, drop = FALSE
) +
annotation_scale(
location = "br",
bar_cols = c("gray40", "white"),
width_hint = 0.4
)
ggplot_map
class_color <- c("#d7191c", "#fdae61", "#ffffbf", "#a6d96a", "#1a9641")
tmap_map <- tm_graticules(labels.cardinal = TRUE) +
tm_shape(sigungu_data) +
tm_polygons(
fill = "index", id = "SGG1_FNM",
fill.scale = tm_scale_intervals(
values = class_color,
breaks = c(0, 0.2, 0.5, 1.0, 1.5, Inf),
labels = c("< 0.2", "0.2 ~ 0.5", "0.5 ~ 1.0",
"1.0 ~ 1.5", ">= 1.5")
),
fill.legend = tm_legend(title = "Classes")
) +
tm_shape(sido_shp) + tm_borders(lwd = 1.5) +
tm_scalebar(breaks = seq(0, 200, 50))
tmap_map
ggplotly() 함수library(ggiraph)
sigungu_data <- sigungu_data |>
mutate(
index = format(index, digits = 4, nsmall = 4),
my_tooltip = str_c("Name: ", SGG1_FNM, "\n Index: ", index)
)
gg <- ggplot() +
geom_sf_interactive(
data = sigungu_data,
aes(fill = index_class, tooltip = my_tooltip, data_id = SGG1_FNM),
show.legend = TRUE
) +
geom_sf(data = sido_shp, fill = NA, lwd = 0.5) +
scale_fill_manual(
name = "Classes",
labels = c("< 0.2", "0.2 ~ 0.5", "0.5 ~ 1.0", "1.0 ~ 1.5", ">= 1.5"),
values = class_color, drop = FALSE
)
girafe(ggobj = gg) |>
girafe_options(opts_hover(css = "fill: gray"))library(leaflet)
world_data <- world_data |> filter(!is.na(TFR))
bins <- c(0, 1.5, 2.1, 3, 4, 5, Inf)
pal <- colorBin("YlOrRd", domain = world_data$TFR, bins = bins)
labels <- sprintf("<strong>%s</strong><br/>%g",
world_data$name_long, world_data$TFR) |> lapply(htmltools::HTML)
leaflet(world_data) |>
addProviderTiles(providers$Esri.WorldTopoMap) |>
addPolygons(
fillColor = ~pal(TFR), weight = 2, opacity = 1, color = "white",
dashArray = "3", fillOpacity = 0.6,
highlightOptions = highlightOptions(
weight = 5, color = "#666", dashArray = "",
fillOpacity = 0.6, bringToFront = TRUE
),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px", direction = "auto"
)
) |>
addLegend(
pal = pal, values = ~TFR, opacity = 0.6, title = NULL, position = "bottomright"
)library(tmap)
class_color <- c("#d7191c", "#fdae61", "#ffffbf", "#a6d96a", "#1a9641")
sigungu_data <- sigungu_data |> mutate(index = as.numeric(index))
tmap_mode(mode = "view")
my_tmap <- tm_shape(sigungu_data) +
tm_polygons(
fill = "index", fill_alpha = 0.6, col_alpha = 0.5,
popup.vars = c("지역소멸위험지수: " = "index"),
popup.format = list(index = list(digits = 3)),
id = "SGG1_FNM",
fill.scale = tm_scale_intervals(
values = class_color, breaks = c(0, 0.2, 0.5, 1.0, 1.5, Inf),
labels = c("< 0.2", "0.2~0.5", "0.5~1.0", "1.0~1.5", ">= 1.5")
),
fill.legend = tm_legend(title = "Classes")
) +
tm_shape(sido_shp) + tm_borders(lwd = 2)
my_tmaphttps://www.geeksforgeeks.org/artificial-intelligence/large-language-model-llm/
LLM을 웹 인터페이스에서 사용하는 것이 아니라, 코드로 직접 제어하고 자동화하는 방식
API(Application Programming Interface, 응용프로그램 프로그래밍 인터페이스)
응용프로그램(예: 웹 앱)이 프로그래밍을 통해 다른 프로그램이나 서비스(예: ChatGPT)와 상호작용하도록 해 주는 접점
HTTP 요청(POST) + JSON 구조로 메시지 전달
모델 이름, 메시지, 파라미터를 코드로 지정
응답은 JSON 형태의 텍스트/토큰
대량 처리, 반복 처리, 자동화, 소프트웨어 통합
요청(request) 구성 요소
Base URL: 모델 서버의 접속 주소, https://api.openai.com/v1
모델 이름: gpt-5.1
API Key (인증): 사용자 신원 증명 토큰
메시지: 모델에 보낼 내용, JSON 배열로 구성
응답(response) 구성 요소
모델 출력 텍스트: 모델이 생성한 실제 답변
토큰 사용량: 과금 및 모델 내부 처리량 계산에 사용
메시지 구조(JSON)
Google AI Studio(https://aistudio.google.com/app/) 접속
왼쪽 하단에서 Get API Key 클릭
오른쪽 상단에서 API 키 만들기 클릭
새 키 만들기 창
키 이름 지정: 이름 지정
가져온 프로젝트 선택: 프로젝트 가져오기 혹은 프로젝트 만들기
오른쪽 아이콘 중 Copy API key 선택
콘솔: usethis::edit_r_environ() 실행
.Renviron 파일
GEMINI_API_KEY=your_key_here
저장
Session > Restart R 실행
library(ellmer)
chat <- chat_google_gemini(
base_url = "https://generativelanguage.googleapis.com/v1beta/",
api_key = Sys.getenv("GEMINI_API_KEY"),
model = "gemini-2.5-flash",
system_prompt = ""
)
chat$chat("서울대학교 AI융합교육학과를 소개해주세요.")서울대학교 AI융합교육학과는 4차 산업혁명 시대를 이끌어갈 핵심 동력인 인공지능(AI) 기술과 다양한 학문 분야의 융합을 통해 새로운 가치를
창출하고, 미래 사회를 선도할 융합형 인재를 양성하기 위해 설립된 학과입니다. 단순히 AI 기술자를 넘어, AI를 통해 사회 전반의 혁신을
이끌어낼 리더를 키우는 데 중점을 둡니다.
다음은 서울대학교 AI융합교육학과에 대한 상세한 소개입니다.
---
### **서울대학교 AI융합교육학과 소개**
**1. 설립 배경 및 목표**
* **시대적 요구:** 인공지능 기술의 급격한 발전과 함께 사회, 경제, 문화 등 모든 분야에서 인공지능과의 융합이 필수적인 시대가
도래했습니다. 이에 따라 깊이 있는 AI 전문성과 더불어 다양한 분야를 이해하고 융합할 수 있는 인재에 대한 요구가 증대되었습니다.
* **학과 목표:**
* **AI 핵심 역량:** 인공지능의 핵심 이론과 기술(머신러닝, 딥러닝, 데이터 과학 등)에 대한 깊이 있는 이해와 실제 구현
역량 함양.
* **융합적 사고:** AI 기술을 다양한 학문 분야(교육, 의료, 금융, 예술, 인문사회 등)에 적용하고, 새로운 문제 해결
방안을 모색하는 융합적 사고 능력 배양.
* **사회적 리더십:** AI 시대의 윤리적, 사회적 문제에 대한 비판적 통찰력을 바탕으로, AI 기술을 통해 인류와 사회에
기여할 수 있는 리더십 함양.
**2. 교육 과정 및 커리큘럼**
AI융합교육학과는 학제 간 융합 교육의 특성을 살려, 다음 세 가지 축을 중심으로 커리큘럼을 구성합니다.
* **AI 심화 학습:**
* 인공지능 개론, 기계학습, 딥러닝, 자연어 처리, 컴퓨터 비전, 강화 학습 등 AI 핵심 기술 과목.
* 데이터 과학, 통계학, 알고리즘 등 AI 구현에 필요한 기초 및 심화 과목.
* **융합 및 응용 분야 학습:**
* AI를 활용한 다양한 분야의 응용 사례 연구 및 프로젝트 수행.
* (예: 교육 AI, 헬스케어 AI, 금융 AI, 로봇 AI, 인문사회 AI 등)
* 도메인 특화 데이터 분석 및 모델링 능력 강화.
* **윤리 및 사회적 관점:**
* AI 윤리, 인공지능과 사회, 인공지능 법규 등 AI 시대의 책임감 있는 개발 및 활용을 위한 과목.
* 기술 혁신이 가져올 사회적 영향에 대한 이해와 비판적 사고력 함양.
**3. 학과의 특징 및 강점**
* **서울대학교 최고 수준의 연구 환경:** 대한민국 최고 지성의 요람인 서울대학교의 풍부한 연구 인프라와 다양한 학문 분야의 전문가
네트워크를 활용합니다.
* **학제 간 융합 교육:** 특정 단과대학에 소속되기보다는 여러 학문 분야의 교수진이 참여하여 다학제적 관점에서 AI를 연구하고
교육합니다. 이를 통해 학생들은 폭넓은 시야와 깊이 있는 전문성을 동시에 확보할 수 있습니다.
* **실용적 문제 해결 능력 강조:** 이론 교육과 더불어 실제 데이터와 문제에 기반한 프로젝트 및 연구 참여 기회를 풍부하게 제공하여,
학생들이 현실 문제 해결 능력을 갖추도록 돕습니다.
* **미래 지향적 인재 양성:** 변화하는 시대의 요구에 발맞춰 AI 기술을 선도하고, 이를 통해 새로운 가치를 창출할 수 있는
창의적이고 비판적인 인재를 양성하는 데 주력합니다.
**4. 졸업 후 진로**
AI융합교육학과 졸업생들은 다양한 분야에서 핵심적인 역할을 수행할 수 있습니다.
* **IT/AI 기업:** 국내외 AI 선도 기업(네이버, 카카오, 삼성전자, LG전자, 구글, 마이크로소프트 등)의 AI 개발자,
데이터 과학자, AI 연구원, AI 서비스 기획자.
* **다양한 산업 분야:** 금융, 의료, 제조, 교육, 미디어, 국방 등 AI 기술을 적극적으로 도입하고 활용하는 기업 및 기관의 AI
전략가, 컨설턴트, 융합 전문가.
* **학계 및 연구기관:** 국내외 대학원 진학을 통한 심화 연구, 정부출연연구소 등 전문 연구기관의 AI 연구원.
* **공공 부문:** AI 관련 정책 수립 및 집행을 담당하는 정부 및 공공기관 전문가.
* **스타트업 창업:** AI 기술을 활용한 혁신적인 서비스 및 제품 개발을 통한 창업.
---
서울대학교 AI융합교육학과는 AI 기술의 깊이 있는 이해를 바탕으로 사회 전반의 혁신을 이끌어낼 인재, 즉 'AI 시대를 이끄는 융합형
리더'를 양성하는 데 목표를 둔, 매우 미래 지향적이고 핵심적인 학과라고 할 수 있습니다.
Ollama 홈페이지 접속: https://ollama.com/
Download 클릭
모델 다운로드: Windows PowerShell 실행
ollama pull gemma3:4b실행
library(ellmer)
chat <- chat_ollama(
base_url = "http://localhost:11434",
model = "gemma3:4b",
system_prompt = ""
)
chat$chat("서울대학교 AI융합교육학과를 소개해주세요.")서울대학교 AI융합교육학과(이하 AI융합교육학과)는 인공지능(AI) 기술의 발전 속도에 발맞춰, AI를 교육의 핵심 요소로 통합하고, 미래
사회를 이끌어갈 창의적이고 윤리적인 인재를 양성하기 위해 설립된 학과입니다.
**주요 특징 및 목표:**
* **AI 교육의 선도:** 국내 대학 최초로 AI융합교육을 전공으로 정립하여, AI 교육의 표준을 제시하고 발전시키는 역할을 수행합니다.
* **융합 교육 중심:** IT, 인문학, 사회과학 등 다양한 분야를 융합하여 AI의 활용 가능성을 극대화하고, 실생활에 적용 가능한
창의적인 문제 해결 능력을 키웁니다.
* **미래 인재 양성:** AI 기술을 이해하고 활용할 수 있는 핵심 역량과 더불어, 윤리적 책임감을 갖춘 미래 사회의 리더를 육성합니다.
* **실용적인 교육 과정:** 이론 교육과 더불어, AI 관련 프로젝트, 워크숍, 캡스톤 디자인 등의 실습 중심 교육을 통해 학습 효과를
높입니다.
**교육 과정:**
* **교양:** AI 기초, 데이터 분석, 윤리 등 AI를 전반적으로 이해할 수 있는 교양 강좌를 제공합니다.
* **전공 필수:** AI 기초, 머신러닝, 딥러닝, 자연어 처리, 컴퓨터 비전 등 AI 관련 핵심 기술을 집중적으로 학습합니다.
* **전공 선택:** 교육 데이터 분석, AI 활용 사례 연구, 인간-AI 상호작용, AI 및 사회 문제 등 관심 분야를 심화 학습할 수
있는 선택 강좌를 제공합니다.
* **기타:** 인문학, 사회과학 등의 분야를 융합하여 AI를 비판적으로 사고하고 활용하는 능력을 길러줍니다.
**특징적인 교육 방식:**
* **AI 랩 운영:** 다양한 AI 랩을 운영하여 학생들에게 실제 AI 연구 경험을 제공합니다.
* **산업체 연계 프로그램:** 기업과의 산학 협력을 통해 학생들의 실무 능력을 향상시키고, 취업 기회를 확대합니다.
* **글로벌 네트워크 구축:** 해외 대학과의 교류 프로그램을 통해 국제적인 시각을 함양합니다.
**참고 자료:**
* **서울대학교 AI융합교육학과 홈페이지:**
[https://www.ai.snu.ac.kr/](https://www.ai.snu.ac.kr/)
더 자세한 정보는 위 홈페이지에서 확인하실 수 있으며, 궁금한 점이 있다면 언제든지 다시 질문해주세요.

https://sangillee.snu.ac.kr/